/**
 * **************************************************************************
 *
 * @说明: 
 * @项目名称: talent-aio-examples-server
 *
 * @author: tanyaowu 
 * @创建时间: 2016年11月17日 下午5:59:24
 *
 * **************************************************************************
 */
package com.talent.proxy.mysql.client;

import java.io.IOException;
import java.nio.ByteOrder;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.talent.aio.client.AioClient;
import com.talent.aio.client.ClientGroupContext;
import com.talent.aio.client.ReconnConf;
import com.talent.aio.client.intf.ClientAioHandler;
import com.talent.aio.client.intf.ClientAioListener;
import com.talent.proxy.mysql.common.MysqlExt;
import com.talent.proxy.mysql.common.MysqlPacket;
import com.talent.proxy.mysql.common.MysqlReturn;
import com.talent.proxy.mysql.common.client.ClientConfig;
import com.talent.proxy.mysql.common.client.MysqlClientGroupContext;

/**
 * 
 * @author tanyaowu 
 * @创建时间 2016年11月17日 下午5:59:24
 *
 * @操作列表
 *  编号	| 操作时间	| 操作人员	 | 操作说明
 *  (1) | 2016年11月17日 | tanyaowu | 新建类
 *
 */
public class MysqlClientStarter
{
	@SuppressWarnings("unused")
	private static Logger log = LoggerFactory.getLogger(MysqlClientStarter.class);

	/**
	 * 
	 * @param serverIp
	 * @param serverPort
	 * @param username
	 * @param password
	 * @param db
	 * @param props
	 * @throws IOException
	 *
	 * @author: tanyaowu
	 * @创建时间:　2017年1月24日 下午3:20:46
	 *
	 */
	public MysqlClientStarter(String serverIp, int serverPort, String username, String password, String db, Map<String, String> props) throws IOException
	{
		ClientConfig clientConfig = new ClientConfig(serverIp, serverPort, username, password, db, props);
		clientAioHandler = new MysqlClientAioHandler();
		clientAioListener = new MysqlClientAioListener();
		clientGroupContext = new MysqlClientGroupContext(clientConfig, clientAioHandler, clientAioListener, reconnConf);
		//		clientGroupContext.setByteOrder(ByteOrder.LITTLE_ENDIAN);
		clientGroupContext.setReadBufferSize(1024 * 1000);
		clientGroupContext.setByteOrder(ByteOrder.LITTLE_ENDIAN);
		aioClient = new AioClient<>(clientGroupContext);
	}

	private AioClient<MysqlExt, MysqlPacket, MysqlReturn> aioClient;

	private MysqlClientGroupContext clientGroupContext = null;

	private ClientAioHandler<MysqlExt, MysqlPacket, MysqlReturn> clientAioHandler = null;

	private ClientAioListener<MysqlExt, MysqlPacket, MysqlReturn> clientAioListener = null;

	private static ReconnConf<MysqlExt, MysqlPacket, MysqlReturn> reconnConf = new ReconnConf<MysqlExt, MysqlPacket, MysqlReturn>(5000L);

	//--------------


	public static AtomicLong SEQ = new AtomicLong();

	/**
	 * @param args
	 *
	 * @author: tanyaowu
	 * @throws IOException 
	 * @创建时间:　2016年11月17日 下午5:59:24
	 * 
	 */
	public static void main(String[] args) throws Exception
	{
		com.talent.proxy.mysql.client.ui.JFrameMain.main(args);
	}

	/**
	 * @return the aioClient
	 */
	public AioClient<MysqlExt, MysqlPacket, MysqlReturn> getAioClient()
	{
		return aioClient;
	}

	/**
	 * @param aioClient the aioClient to set
	 */
	public void setAioClient(AioClient<MysqlExt, MysqlPacket, MysqlReturn> aioClient)
	{
		this.aioClient = aioClient;
	}

	/**
	 * @return the clientGroupContext
	 */
	public ClientGroupContext<MysqlExt, MysqlPacket, MysqlReturn> getClientGroupContext()
	{
		return clientGroupContext;
	}

	/**
	 * @param clientGroupContext the clientGroupContext to set
	 */
	public void setClientGroupContext(MysqlClientGroupContext clientGroupContext)
	{
		this.clientGroupContext = clientGroupContext;
	}

	/**
	 * @return the clientAioHandler
	 */
	public ClientAioHandler<MysqlExt, MysqlPacket, MysqlReturn> getClientAioHandler()
	{
		return clientAioHandler;
	}

	/**
	 * @param clientAioHandler the clientAioHandler to set
	 */
	public void setClientAioHandler(ClientAioHandler<MysqlExt, MysqlPacket, MysqlReturn> clientAioHandler)
	{
		this.clientAioHandler = clientAioHandler;
	}

	/**
	 * @return the clientAioListener
	 */
	public ClientAioListener<MysqlExt, MysqlPacket, MysqlReturn> getClientAioListener()
	{
		return clientAioListener;
	}

	/**
	 * @param clientAioListener the aioListener to set
	 */
	public void setClientAioListener(ClientAioListener<MysqlExt, MysqlPacket, MysqlReturn> clientAioListener)
	{
		this.clientAioListener = clientAioListener;
	}

}
